맨위로가기 타임라인 바로가기

자바 (프로그래밍 언어)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
타임라인 바로가기

1. 개요

자바(Java)는 1991년 제임스 고슬링, 마이크 셰리던, 패트릭 노튼에 의해 시작된 객체 지향 프로그래밍 언어이다. 썬 마이크로시스템즈에서 1996년 첫 공개 구현을 출시했으며, "한 번 작성, 어디서나 실행(WORA)"을 목표로 다양한 플랫폼에서 실행될 수 있는 특징을 가진다. 자바는 샌드박스 모델 기반의 보안 기능을 갖추고 있으며, 자동 메모리 관리, 멀티스레딩, 분산 컴퓨팅을 지원한다. 자바 플랫폼은 자바 SE, 자바 EE, 자바 ME, 자바 카드 등 여러 에디션으로 제공되며, 자바 API 및 라이브러리를 통해 다양한 기능을 제공한다. 오라클에서 자바 관련 자격증을 주관하고 있으며, 안드로이드 운영체제 개발에도 사용된다.

더 읽어볼만한 페이지

  • 1995년 개발된 프로그래밍 언어 - PHP
    PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
  • 1995년 개발된 프로그래밍 언어 - 자바스크립트
    자바스크립트는 웹 페이지에 동적인 기능을 추가하기 위해 개발된 프로그래밍 언어로, 초기에는 라이브스크립트라 불렸으나 자바의 인기에 힘입어 변경되었고, ECMAScript로 표준화되어 웹 브라우저와 Node.js 등 다양한 환경에서 활용되지만, 오라클의 상표권 소유로 논란이 있다.
  • 명령형 프로그래밍 언어 - 코틀린 (프로그래밍 언어)
    코틀린은 젯브레인즈에서 개발한 정적 타입 언어로, 자바 가상 머신에서 동작하며 자바와의 호환성을 갖고, 안드로이드 공식 지원 언어로 채택되어 다양한 분야에서 활용되고 있으며, 이름은 러시아의 코틀린 섬에서 유래되었다.
  • 명령형 프로그래밍 언어 - 스칼라 (프로그래밍 언어)
    스칼라는 마틴 오더스키가 설계한 객체 지향 및 함수형 프로그래밍 언어이며, 자바 플랫폼에서 실행되고 자바 코드와 상호 운용이 가능하며, 아파치 스파크 등 다양한 곳에서 활용된다.
  • JVM 프로그래밍 언어 - 코틀린 (프로그래밍 언어)
    코틀린은 젯브레인즈에서 개발한 정적 타입 언어로, 자바 가상 머신에서 동작하며 자바와의 호환성을 갖고, 안드로이드 공식 지원 언어로 채택되어 다양한 분야에서 활용되고 있으며, 이름은 러시아의 코틀린 섬에서 유래되었다.
  • JVM 프로그래밍 언어 - 스칼라 (프로그래밍 언어)
    스칼라는 마틴 오더스키가 설계한 객체 지향 및 함수형 프로그래밍 언어이며, 자바 플랫폼에서 실행되고 자바 코드와 상호 운용이 가능하며, 아파치 스파크 등 다양한 곳에서 활용된다.
자바 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서
기본 정보
이름자바
로고Java programming language logo.svg
설계자제임스 고슬링
개발자오라클
발표 연도1995년
최신 버전Java Standard Edition 23.0.1
최신 버전 발표일2024년 10월 15일
종류객체 지향, 컴포넌트 기반, 리플렉티브, 제네릭, 함수형, 병행 프로그래밍
정적 타이핑強い정적 형 결정
구현체Java 플랫폼
파일 확장자.java, .class, .jar, .jmod, .war
웹사이트Oracle Java
형 체계
특징정적, 강한, 안전한, 명목적, 명시적
메모리 관리
메모리 관리 방식자동 가비지 컬렉션
영향
영향을 받은 언어CLU
Simula 67
LISP
스몰토크
Ada 83
C++
C#
Eiffel
Mesa
Modula-3
Oberon
Objective-C
UCSD Pascal
Object Pascal
영향을 준 언어Ada 2005
BeanShell
C#
Chapel
Clojure
ECMAScript
Fantom
Gambas
Groovy
Hack
Haxe
J#
Kotlin
PHP
Python
Scala
Seed7
Vala
JavaScript
JS++
ArkTS
라이선스
라이선스GNU 일반 공중 사용 허가서, Java Community Process

2. 역사

제임스 고슬링, 자바의 창시자, 2008년


자바 언어는 1991년 6월 제임스 고슬링이 셋톱 프로젝트를 위해 만들었다. 이 언어는 원래 제임스 고슬링의 사무실 밖에 있던 오크 나무를 따서 오크(Oak), 혹은 그린(Green) 이라고도 불렀으나, 단어 목록 중 무작위로 뽑은 자바(Java)를 선택했다.[23] 고슬링의 목표는 C/C++ 스타일의 언어와 가상 머신을 구현하는 것이었다.

1995년에 최초 공개 버전인 자바 1.0이 출시되었다. 한 번 작성, 어디서나 실행 (Write Once, Run Anywhere)을 약속하며 인기 컴퓨팅 플랫폼에 무료 런타임을 제공하였다. 이 플랫폼은 꽤 안정성을 지녔고 보안 시스템은 여러 설정을 통해 네트워크 및 파일 접근을 통제할 수 있었다. 대부분의 웹 브라우저들은 곧 자바 애플릿을 웹 페이지 안에서 실행할 수 있었고 자바는 빠르게 인기를 얻었다.

자바 2(JDK 1.2 ~ 1.4)는 여러 다양한 플랫폼에서 사용할 수 있게 만들어졌다. 예를 들어 J2EE는 엔터프라이즈 애플리케이션, J2ME는 모바일 애플리케이션, J2SE는 스탠다드 에디션으로 지정되었다. 2006년에는 마케팅용으로 Java EE, Java ME, Java SE 순서대로 명칭을 바꾸었다.

썬 마이크로시스템즈는 1997년 ISO/IEC JTC 1 표준화 그룹과 Ecma International에 정식 승인을 받으려 했으나 곧 철회했다.[27][28][29] 자바는 사실상의 표준이며 자바 커뮤니티 프로세스(Java Community Process)를 통해 관리되고 있다.[30] 썬 마이크로시스템즈는 자바의 대부분을 무료로 배포하였으나 독점 소프트웨어였고, 자바 엔터프라이즈 시스템 같은 특정 라이선스를 판매하여 수입을 올렸다.

2006년 11월 13일, 썬 마이크로시스템즈는 자바 대부분을 GPL 라이선스로 공개했으며, 2007년 5월 8일에 이 과정을 마쳤다. 썬 마이크로시스템즈가 권한을 가지고 있지 않은 대부분의 코어 부분도 오픈 소스화되었다.[31] 2009년 4월 20일, 오라클썬 마이크로시스템즈를 인수 합병하면서 자바에 대한 권리와 유지보수 또한 오라클로 넘어가게 되었다.

2. 1. 개발 배경

제임스 고슬링, 마이크 셰리던, 패트릭 노튼은 1991년 6월에 자바 언어 프로젝트를 시작했다.[21] 자바는 원래 대화형 텔레비전을 위해 설계되었지만, 당시 디지털 케이블 텔레비전 산업에는 너무 앞선 기술이었다.[22] 이 언어는 처음에는 고슬링의 사무실 밖에 서 있던 참나무에서 이름을 따서 ''Oak''라고 불렸다. 나중에 프로젝트는 ''Green''이라는 이름을 거쳐, 인도네시아에서 생산되는 커피의 일종인 자바 커피에서 따와 최종적으로 ''Java''로 이름이 변경되었다.[23] 고슬링은 C/C++ 스타일의 구문을 사용하여 시스템 및 응용 프로그램 프로그래머가 익숙하게 사용할 수 있도록 자바를 설계했다.[24]

2. 2. 초기 발전

제임스 고슬링을 비롯한 썬 마이크로시스템즈의 개발자들은 1991년 6월에 셋톱 프로젝트의 일환으로 자바 언어를 개발하기 시작했다.[21] 초기에는 참나무에서 이름을 따 ''Oak''라고 불렸으나, 이후 ''Green''이라는 이름을 거쳐 최종적으로 자바 커피에서 유래한 ''Java''로 이름이 변경되었다.[23] 고슬링은 C/C++ 스타일의 구문을 사용하여 프로그래머들이 익숙하게 사용할 수 있도록 자바를 설계했다.[24]

1995년에 최초 공개 버전인 자바 1.0이 출시되었다.[25] 자바는 한 번 작성, 어디서나 실행 (WORA) 기능을 제공하며, 주요 컴퓨팅 플랫폼에서 무료 런타임을 제공하여 인기를 얻었다. 또한 비교적 안전하고 구성 가능한 보안 기능을 갖추고 있어 네트워크 및 파일 액세스 제한이 가능했다. 주요 웹 브라우저들이 자바 애플릿 실행 기능을 통합하면서 자바는 빠르게 인기를 얻었다.

1998년 12월, 자바 2 (J2SE 1.2)가 출시되면서 다양한 플랫폼에 맞는 여러 구성들이 만들어졌다. J2EE는 엔터프라이즈 애플리케이션, J2ME는 모바일 애플리케이션, J2SE는 데스크톱 버전을 위한 기술과 API를 포함했다. 2006년에는 마케팅 목적으로 ''Java EE'', ''Java ME'', ''Java SE''로 이름이 변경되었다.

1997년, 썬 마이크로시스템즈는 ISO/IEC JTC 1 표준 기구와 Ecma International에 자바를 공식화하려 했으나, 곧 철회했다.[27][28][29] 자바는 Java Community Process를 통해 관리되는 ''사실상'' 표준으로 남았다.[30]

2. 3. 썬 마이크로시스템즈 인수와 오픈 소스화

썬 마이크로시스템즈는 2006년 11월 13일에 자바 대부분을 GPL 라이선스로 공개했으며, 2007년 5월 8일에 이 과정을 마쳤다. 썬 마이크로시스템즈가 권한을 가지고 있지 않은 대부분의 코어 부분도 오픈 소스화에 포함되었다.[31]

2009년 4월 20일, 오라클썬 마이크로시스템즈를 인수 합병하면서 자바에 대한 권리와 유지보수 또한 오라클로 넘어가게 되었다.[33]

2. 4. 버전 역사

자바 버전은 보통 Java SE 또는 JDK/JRE 버전으로 표현한다.

JDK(Java Development Kit)는 표준 라이브러리를 포함하며, JDK 버전이 변경됨에 따라 라이브러리가 확대되고 API가 변경된다. 초기 1.0/1.1 버전에서는 JDK/JRE 명칭을 사용했으나, Java 1.2 발표와 함께 J2SDK/J2RE로 변경되었다. 그러나 기존 명칭을 사용하는 경우가 많아 현재는 다시 JDK/JRE 명칭으로 사용되고 있다. 또한 J2SE(Java2 Standard Edition)라는 명칭도 Java SE(Java Standard Edition)로 변경되었다.[125]

자바 버전 체계의 메이저 버전(소수점 위)은 1.x로 고정되어 있어 마이너 업데이트로 오해하는 경우가 있었다. 이를 해결하기 위해 1.5 버전부터는 5.0(1.5), 6(1.6)과 같이 제품 버전을 코드 버전과 별도로 발표하고 있다.[126]

언어 자체는 자바 언어 명세(Java Language Specification, JLS)에서 정의되며, 판(edition영어)으로 구분된다. JDK가 확장되는 동안 언어는 2판에서 거의 변화가 없었으나, JDK 5와 함께 변경된 JLS 3판에서는 제네릭(generic영어) 타입, 애너테이션(annotation영어) 등의 기능이 도입되면서 큰 변화가 있었다.

JDK 7에서는 자바 언어에 상당한 변화가 계획되었으나, JDK 7과 JDK 8로 변경사항이 나뉘면서 JDK 7에는 상대적으로 작은 언어적 특성만 추가되었다. 이진수 표기 추가, 숫자 표기에 밑줄(underscore영어)을 허용하여 가독성 향상, 스위치 문(switch영어)에서 문자열 사용, 제네릭 타입 객체 생성 시 타입 추론(type inference영어), 자동 자원 해제를 위한 try 문법, 여러 예외 타입을 동시에 처리하는 문법 등이 추가되었다.

JDK 9는 사업적으로 큰 변화가 있었다. 언어적인 변화보다는 사용 방법이 변경되었는데, Java 8까지는 사업적 사용이 가능했지만, JDK 9부터는 불가능하게 되었다. 즉, Java 프로그램을 유료로 판매할 수 없게 되었다. 그러나 사업 목적이 아닌 개인용 및 학생용으로는 JDK 16까지 사용이 가능하다.

버전날짜
JDK 베타1995
JDK 1.01996년 1월 23일[127]
JDK 1.11997년 2월 19일
J2SE 1.21998년 12월 8일
J2SE 1.32000년 5월 8일
J2SE 1.42002년 2월 6일
J2SE 5.02004년 9월 30일
Java SE 62006년 12월 11일
Java SE 72011년 7월 28일
Java SE 8 (LTS)2014년 3월 18일
Java SE 92017년 9월 21일
Java SE 102018년 3월 20일
Java SE 11 (LTS)2018년 9월 25일[128]
Java SE 122019년 3월 19일
Java SE 132019년 9월 17일
Java SE 142020년 3월 17일
Java SE 152020년 9월 15일[129]
Java SE 162021년 3월 16일
Java SE 17 (LTS)2021년 9월 14일
Java SE 182022년 3월 22일
Java SE 192022년 9월 21일
Java SE 202023년 3월 21일



오라클(Oracle) 및 기타 업체들은 해결되지 않은 보안 문제로 인해 오래되고 지원되지 않는 자바 버전을 제거할 것을 권장한다. 현재 자바 8, 11, 17, 21은 장기 지원 (LTS) 버전으로 지원되며, 2025년 9월 출시 예정인 자바 25가 다음 LTS 버전이다.[38]

오라클레거시 버전인 자바 8 LTS에 대한 마지막 무상 공개 업데이트를 2019년 1월에 상업적 용도로 배포했으며, 개인적인 용도로는 무기한으로 자바 8을 공개 업데이트로 계속 지원할 예정이다. Adoptium과 같은 다른 공급업체들은 OpenJDK의 장기 지원(LTS) 버전을 계속 무료로 제공하며, 이러한 빌드에는 추가 보안 패치 및 버그 수정이 포함될 수 있다.[39]

자바 주요 릴리스 버전과 출시일은 다음과 같다.

버전날짜
JDK 베타1995년
JDK 1.01996년 1월 23일[40]
JDK 1.11997년 2월 19일
J2SE 1.21998년 12월 8일
J2SE 1.32000년 5월 8일
J2SE 1.42002년 2월 6일
J2SE 5.02004년 9월 30일
Java SE 62006년 12월 11일
Java SE 72011년 7월 28일
Java SE 8 (LTS)2014년 3월 18일
Java SE 92017년 9월 21일
Java SE 102018년 3월 20일
Java SE 11 (LTS)2018년 9월 25일[41]
Java SE 122019년 3월 19일
Java SE 132019년 9월 17일
Java SE 142020년 3월 17일
Java SE 152020년 9월 15일[42]
Java SE 162021년 3월 16일
Java SE 17 (LTS)2021년 9월 14일
Java SE 182022년 3월 22일
Java SE 192022년 9월 20일
Java SE 202023년 3월 21일
Java SE 21 (LTS)2023년 9월 19일[43]
Java SE 222024년 3월 19일
Java SE 232024년 9월 17일


3. 철학 및 특징

자바는 처음 만들어질 때부터 5가지 주요 목표를 가지고 설계되었다.[130]


  • 객체 지향 프로그래밍 방식을 사용해야 한다.
  • 같은 프로그램(바이트코드)이 여러 운영 체제(마이크로프로세서)에서 실행될 수 있어야 한다.
  • 컴퓨터 네트워크 접근 기능이 기본으로 포함되어 있어야 한다.
  • 원격 코드를 안전하게 실행할 수 있어야 한다.
  • 다른 객체 지향 언어들의 좋은 점들을 가져와서 사용하기 쉽게 만들어야 한다.


자바는 초기 설계부터 객체 지향 언어로 설계되었다는 점에서 CC++로 발전한 것과는 다르다.[130] 또한, 같은 코드로 어떤 마이크로프로세서에서나 실행될 수 있도록 자바 바이트코드라는 중간 코드를 생성하고, 자바 가상 머신(JVM)을 통해 해석되어 실행된다.[130]

자바 언어를 만들 때 고려된 다섯 가지 주요 목표는 다음과 같다:[17]

# 단순하고 객체 지향적이며 익숙해야 한다.

# 강건하고 안전해야 한다.

# 아키텍처에 독립적이고 이식성이 좋아야 한다.

# 높은 성능으로 실행되어야 한다.

# 인터프리터 방식이며, 스레드를 지원하고 동적이어야 한다.

C++(C++)로 작성된 프로그램보다 느리고 더 많은 메모리를 필요로 한다는 평가를 받기도 했지만,[50][51] JIT 컴파일 도입과 JVM 최적화 등으로 실행 속도가 향상되었다.[52]

3. 1. 객체 지향 프로그래밍

자바는 객체 지향 언어(객체 지향 프로그래밍)로 설계되었다. CC++로 진화한 것과는 차이가 있다.[130] 자바는 클래스 기반의 객체 지향 언어이다. 클래스, 인터페이스, 인스턴스와 같은 개념을 중심으로 한다.

클래스의 멤버 요소는 필드, 메서드, 정적 필드, 정적 메서드, 상수, 내부 클래스, 생성자, 파이널라이저이다. 인터페이스는 추상 메서드와 상수로 구성된 순수 추상 클래스이다. 클래스는 인스턴스의 틀이며, 인스턴스는 클래스를 실체화한 것이다. 자바 프로그램은 1개 이상의 클래스 정의문으로 구성된다. 자바의 클래스는 캡슐화, 상속, 다형성을 지원한다.

캡슐화는 클래스 멤버의 가시성(private, package, protected, public)으로 지원된다. 가시성이란 멤버의 접근 허용 범위를 정하는 것으로, `private`는 동일 클래스 내, `package`는 동일 클래스 및 동일 패키지 내, `protected`는 동일 클래스, 동일 패키지 및 파생 클래스 내, `public`은 제한 없음을 의미한다. 패키지는 프로그램 전체를 임의로 분할한 소스 파일의 1개 이상의 묶음이다. 자바의 기본 가시성은 파일 단위의 `package`이므로 은폐성보다는 편의성이 중시된다.

상속은 슈퍼클래스가 하나로 제한되는 단일 상속을 지원한다. 다중 상속은 불가능하다. 기존 클래스에 임의 멤버를 추가한 새로운 클래스를 생성할 수 있다. 자바의 모든 클래스는 `Object` 클래스를 루트 클래스로 기본 상속한다. `Object` 클래스에는 기능이 갖춰져 있으며, 이는 병렬 프로그래밍을 전제로 한 사양이다.

다형성가상 함수, 추상 클래스, 인터페이스, 동적 다운캐스팅으로 지원된다. 슈퍼클래스의 `virtual` 메서드를 서브클래스의 동일 이름 메서드로 오버라이드할 수 있는 기능을 가상 함수라고 한다. 슈퍼클래스 변수에 서브클래스 인스턴스를 대입하고 해당 변수에서 서브클래스의 메서드가 호출되도록 하는 것은 서브타이핑이 된다. 인터페이스는 추상 메서드만 있는 순수 추상 클래스이며, 임의의 수만큼 클래스에 구현할 수 있다. 런타임 다운캐스팅은 `instanceof` 연산자의 런타임 타입 검사가 가능하며, 다운캐스팅 실패 시 예외가 발생한다.

3. 2. 플랫폼 독립성

"''Write once, run anywhere''"(한 번 작성하면 어디에서든 실행된다)는 자바의 핵심 철학 중 하나이다.[130] 자바의 플랫폼 독립성은 다음과 같은 방식으로 실현된다.

# 자바 컴파일러는 자바 소스 코드를 자바 바이트코드라는 중간 표현으로 컴파일한다. 자바 바이트코드는 자바 가상 머신용 실행 코드이다.

# 자바 가상 머신(JVM)은 각 플랫폼의 차이점을 흡수하는 완충재와 같은 소프트웨어이다. JVM은 다양한 컴퓨터 환경에 대응하는 버전으로 제공되며, 각 플랫폼에 자바 실행 환경의 핵심으로 설치된다.

# 자바 가상 머신자바 바이트코드를 해석하여 실행한다. 인터프리터 방식과 런타임 컴파일러를 사용하는 방식이 있다.

JVM 구조. 소스코드는 바이트코드로 컴파일되어 생성, 코드 검증, JVM에 의해 해석되어 실행(interpreted) 또는 JIT-compiled로 직접 기계어 코드로 변환 실행. JRE(Java Runtime Environment)에 API와 JVM이 함께 만들어짐.


자바 초기에는 인터프리터 방식으로 실행되어 속도가 느렸지만, 런타임 컴파일러 기술과 동적 재컴파일 기술의 도입으로 속도 문제가 개선되었다.[48][49] JVM은 메모리 경계와 버퍼 오버플로우를 검사하고, 클래스 로드 시 바이트코드 검증을 통해 오류 발생을 억제한다.

3. 3. 멀티스레딩

자바 프로그램은 둘 이상의 스레드를 동시에 실행할 수 있는데, 이를 멀티스레드라고 한다. 다수의 스레드를 다루는 대규모 시스템에도 대응하며, 스레드 그룹 API를 통해 스레드를 역할이나 성질에 따라 그룹화하여 일괄적으로 조작할 수 있다. 이는 클라이언트-서버 시스템의 구현에 적합하다. 또한, 스레드 풀과 작업 큐를 조합한 스레드 모니터 API를 제공하여, 다수의 단속적인 트랜잭션을 처리하는 시스템에서 발생하기 쉬운 스레드 생성/파괴의 반복에 따른 부하 증가를 회피할 수 있다.

자바의 멀티스레드 병렬 계산은 임계 구역 동기화를 기준으로 한다. 자바의 모든 인스턴스는 기능을 갖춘 `Object` 클래스를 루트로 상속받으므로, 임계 구역의 락 객체로 사용할 수 있다. 자바에서는 `synchronized`로 지정된 범위가 임계 구역이 된다. 자바의 표준 락 기법은 뮤텍스의 모니터이다. `synchronized` 메서드는 전체가 배타적 섹션이 되며, This 인스턴스가 락 객체가 된다. `synchronized` 정적 메서드에서는 시스템 내의 전용 인스턴스가 락 객체가 된다. `synchronized(지정 변수)` 구문을 사용하면 메서드 내 임의 범위를 임계 구역으로 지정하고, 지정 변수를 락 객체로 사용할 수도 있다.

뮤텍스의 모니터 외에, 카운트 세마포어나 배리어, 읽기-쓰기 락 등의 락 기법은 병행 API에서 제공된다.

3. 4. 자동 메모리 관리 (가비지 컬렉션)

자바 프로그램의 메모리 관리는 자바 가상 머신의 가비지 컬렉션에 의해 수행된다. 가비지 컬렉션이란 이미 어느 곳에서도 참조되지 않는 인스턴스를 자동으로 찾아내어 파기하고, 해당 인스턴스가 점유하고 있던 메모리 영역을 자동으로 해제하는 기능이다. 사람이 직접 객체를 생성하고 파기하는 메모리 관리 작업은 복잡해지기 쉽고, 메모리 누수나 부적절한 해제에 의한 오류를 발생시키기 쉬우며, 버그의 온상이 되는 경우가 많았다. 이러한 작업을 자동화한 가비지 컬렉션은 자바 프로그래머를 복잡한 메모리 관리 작업으로부터 해방시켜준다.[17]

가비지 컬렉터는 시스템 스레드를 통해 참조되지 않는 인스턴스를 계속해서 찾는다. 어딘가에서 끊어진 참조의 연결 고리 덩어리도 정확하게 찾아내어, 참조의 섬이라고 비유되는 메모리 영역을 한꺼번에 해제한다. 자바는 가비지 컬렉션 기능에 많은 노력을 기울이고 있으며, 관련 기술은 현재도 지속적으로 개선되고 있다. 세대별 가비지 컬렉터, 응답 시간 단축을 위한 지연 시간 중시 가비지 컬렉터, 중단 시간 단축을 위한 처리량 중시 가비지 컬렉터 등이 도입되어 지속적으로 개정되고 있으며, 운영 환경에 따라 선택적으로 사용할 수 있도록 지원하고 있다.[17]

3. 5. 분산 컴퓨팅

자바의 분산 컴퓨팅 프로그래밍은 객체 요청 브로커에 준거한다. 이는 네트워크 상에 존재하는 다양한 플랫폼 간에 서로 다른 환경을 의식하지 않고 요청과 응답을 주고받아 임의의 작업을 수행하는 분산 시스템 구축을 지원한다. 각 플랫폼에서 가동되는 서버 애플리케이션과 클라이언트 애플리케이션은 각각 객체를 내포하고 있으며, 업계 공통 규격인 CORBA 또는 자바 고유 규격인 RMI가 제공하는 운용 아키텍처와 통신 프로토콜을 통해 다른 객체와 상호 커뮤니케이션하며, 이러한 객체들을 분산 객체라고 부른다.[17]

업무용 시스템에서는 이미 CORBA가 보급되어 있었기 때문에, 고성능이지만 자바 플랫폼 간의 제한적인 RMI는 그 후발 주자였다. 때문에 RMI는 CORBA와 연계할 수 있도록 RMI over IIOP 등의 다양한 기술이 구현되었다. CORBA의 통신 프로토콜은 IIOP이며, RMI는 JRMP이다. 분산 객체를 구현하기 위한 API와 클래스 라이브러리의 대부분은 Jakarta EE에 속한다. 분산 객체 중에서 서버 기능에 특화된 것은 EJB (Enterprise JavaBeans)라고 불린다.[17]

EJB는 클라이언트와 동기 통신을 하고 트랜잭션을 관리하는 세션 빈, 데이터베이스와 링크하여 영속 데이터를 관리하는 엔티티 빈, 다양한 이벤트로부터의 비동기 통신을 관리하는 메시지 드리븐 빈의 세 가지로 대별된다. 이러한 EJB는 EJB 컨테이너에 내포되어 운용된다. 분산 객체끼리 통신하기 위한 프로토콜은 IIOP 또는 JRMP가 사용된다. JNDI는 조회된 식별명으로부터 네트워크 상의 분산 객체나 각종 리소스의 위치를 특정하여 통신 또는 액세스할 수 있도록 한다.[17]

EJB 컨테이너는 웹 컨테이너와 연계하여 운용되는 것이 보통이다. EJB 컨테이너는 WEB 컨테이너를 일반적인 클라이언트 창구로 사용하는 경우가 많다. WEB 컨테이너는 서블릿과 JSP (Java Server Pages)를 내포하고 있는 WEB용 서버 애플리케이션이며, HTTP 프로토콜을 통해 일반적인 웹 브라우저와의 동기 통신을 한다. WEB 측면의 분산 객체는 WEB 컴포넌트라고 불린다. JSP는 일명 WEB 사이트의 표시에 특화된 컴포넌트이다. 서블릿은 WEB 사이트에 대한 요청을 처리하고, 경우에 따라 세션 빈에 트랜잭션을 위임하는 컴포넌트이다. EJB 컨테이너에서는 JBoss나 WebSphere 등이 유명하다. EJB 컨테이너는 WEB 컨테이너와 통합되어 제공되는 경우가 많다. 웹 컨테이너에서는 Apache Tomcat이 유명하다.[17]

3. 6. 보안

자바는 초기 설계부터 보안을 고려한 언어이다. 자바는 샌드박스 모델에 기반한 보안 기구를 갖추고 있어, 원격에서 다운로드된 프로그램에 의한 시스템 조작이나 사용자 리소스에 대한 접근을 제한한다.[130][17] 이는 자바의 핵심 목표 중 하나인 "원격 코드를 안전하게 실행할 수 있어야 한다"는 점과 연결된다.

4. 자바 플랫폼

자바 플랫폼(''Java Platform'')은 자바 프로그램을 개발하거나 실행하기 위한 소프트웨어의 총칭이다. 자바 플랫폼은 대상 환경에 맞춰 자바 실행 환경 및 자바 개발 환경의 구성 내용과 자바 기술의 추가 내용을 변경하여 에디션으로 편집되어 공개되고 있다. 자바 기술은 권리 원본 벤더뿐만 아니라 서드 파티 측에서도 제공되며, 그 표준화는 자바 커뮤니티 프로세스(JCP)가 관리하고 있다. 자바 실행 환경과 자바 개발 환경은 오픈 소스화되어 있어 각 기업, 각 단체, 개발자 개인이 영리 또는 비영리로 다양한 소프트웨어 및 관련 기술을 공개하고 있으며, 거대한 IT 생태계를 구축하고 있다.

4. 1. 에디션

자바 플랫폼은 대상 환경에 따라 여러 에디션으로 제공된다. 썬 마이크로시스템즈(이후 오라클에 인수)는 응용 프로그램 환경에 맞춰 네 가지 자바 에디션을 정의했다.

  • 자바 카드: 스마트 카드용 에디션이다.
  • 자바 ME(Java ME): 제한된 리소스를 가진 환경을 위한 에디션이다.
  • 자바 SE(Java SE): 워크스테이션 환경을 위한 에디션이다.
  • 자바 EE(Java EE) / 자카르타 EE: 대규모 분산 엔터프라이즈 또는 인터넷 환경을 위한 에디션이다.


2019년 현재, 오라클은 다음 네 가지 자바 플랫폼 에디션을 제공한다.[112][113] 에디션에 따라 자바 실행 환경, 개발 키트, 클래스 라이브러리, API 구성, 그리고 자바 가상 머신 성능에 차이가 있다.

  • Java Platform, Standard Edition (Java SE): 스마트폰, 태블릿 PC를 포함한 개인용 컴퓨터를 위한 에디션이다. 주로 데스크톱 애플리케이션과 웹 앱 개발 및 실행에 사용되며, 일반 사용자용 사양이다.
  • Java Platform, Enterprise Edition (Java EE) / 자카르타 EE: 서버, 워크스테이션을 위한 에디션이다. Java SE에 웹 서버, 다층 클라이언트 서버, 업무용 시스템 개발을 위한 확장 기술 클래스 라이브러리 및 API가 추가된, 대규모 업무용 프로페셔널 사양이다. 2017년 9월, 오라클은 Java EE의 향후 버전 업이 이클립스 재단에 의해 진행될 것이라고 발표했다.[114] Java EE 상표는 오라클이 보유하고, 이클립스 재단은 이후 버전을 '''자카르타 EE'''라는 이름으로 공개한다.
  • Java Platform, Micro Edition (Java ME): 임베디드 시스템, 마이크로컨트롤러를 위한 에디션이다. 제한된 컴퓨터 자원을 가진 집적 회로 및 전자 기기에 대응하는 기술 사양이며, 전용 클래스 라이브러리 및 API가 제공된다. 자바 가상 머신도 비교적 작게 구성되어 있다.
  • Java Card: 스마트 카드(IC 카드), 소형 메모리 장치에서 실행되는 프로그램 개발을 위한 에디션이다. 2019년 3월 현재 SIM 카드, ATM 카드 등 다양한 분야에 사용된다. 자바 가상 머신 기능이 매우 작게 구성되어 있고, 일부 기본형이 생략되어 있어 특수한 프로그래밍 스타일이 필요하다.


썬 마이크로시스템즈는 PersonalJava라는 에디션도 제공했지만, 이후 표준 기반 자바 ME 구성 프로필 조합으로 대체되었다.

4. 2. 자바 실행 환경 (JRE)

'''자바 실행 환경'''(''Java Runtime Environment'', JRE)은 자바 애플리케이션을 실행하는 데 필요한 소프트웨어이다. JRE는 자바 가상 머신(JVM), Java.exe 스타터를 포함한 각종 실행 지원 도구, 자바 클래스 라이브러리로 구성된다.[49] JRE의 핵심은 자바 가상 머신이다. 에디션마다 가상 머신의 사양과 성능이 다르며, 실행 시 여러 동작 모드를 갖는다. 가상 머신은 스타터를 통해 작동되는 것이 일반적이다. 다양한 사용 상황에 대응하는 스타터가 먼저 실행되고, 거기서 가상 머신이 호출되어 Java 프로그램의 실행이 이관된다. 가상 머신은 Java 클래스 라이브러리를 차례로 읽어들이면서 Java 프로그램을 실행한다. JRE의 도구 내용과 클래스 라이브러리 구성은 에디션마다 차이가 있다.[49]

; Java 클래스 라이브러리

Java 클래스 라이브러리는 보편적으로 호출되는 특정 기능을 구현한 클래스의 집합체이다. Java 프로그램은 라이브러리 내의 클래스를 차례로 호출하면서 처리를 실행한다. 각각의 Java 클래스 라이브러리 내부에서 프로그래머가 이용할 수 있도록 외부에 공개된 부분을 "Java API"라고 부른다.[49]

라이브러리 종류설명
기본 라이브러리Java 언어의 기초를 다룬다.
입출력 라이브러리파일 입출력 등을 다룬다.
컬렉션 라이브러리동적 배열과 동적 연관 배열, 데이터 집합의 조작을 다룬다.
수학 라이브러리각종 계산을 다룬다.
국제화 지역화 라이브러리달력, 날짜, 시간, 통화, 문자 코드 등의 국제화와 지역화를 다룬다.
네트워크 라이브러리소켓 통신을 다룬다.
GUI 라이브러리그래픽 사용자 인터페이스를 다룬다.
애플릿 라이브러리애플릿 생성용이다.
Java 빈즈 라이브러리소프트웨어 컴포넌트 작성용이다.
데이터베이스 연결 라이브러리SQL을 다룬다.
원격 메서드 라이브러리분산 객체를 다룬다.
보안 라이브러리보안 정책, 사용자 인증과 권한 승인, 공개 키 암호 방식 등을 다룬다.



; Java 애플리케이션의 형태

JRE에 준비된 특정 Java 클래스 라이브러리를 이용함으로써 Java 프로그램은 결과적으로 다음 네 종류의 애플리케이션 형태로 파생된다.[49]

애플리케이션 종류설명
Java 애플리케이션 (application)개인용 컴퓨터 등의 로컬 환경에서 실행되는 Java 프로그램이다. "Java Web Start"는 임의의 jnlp 파일(java network launching protocol)을 다운로드하여 실행할 수 있는 Java 앱의 배포 시스템이다.
Java 애플릿 (applet)서버에서 다운로드되어 웹 브라우저에서 실행되는 Java 프로그램이다. 샌드박스 기능 하에서 엄격한 동작 제약이 가해진다.
Java 서블릿 (servlet)서버 머신에서 실행되는 Java 프로그램이다. 이름처럼 손쉽게 서버 프로그램을 구현할 수 있지만, 대규모 서버 구축에도 적합하다. 서블릿은 클라이언트의 요청을 차례로 트랜잭션하여 순차적으로 응답한다. WEB 클라이언트에는 HTML 등의 프로토콜 페이지 및 각종 미디어를 응답하여 WEB 브라우저에 표시한다. Perl 등에 의한 CGI에 비해 서버 측의 부하가 낮은 등의 장점이 있다.
Java 서버 페이지 (server page)서블릿웹 서버용으로 특화한 것으로, XHTML(HTML) 내에 기술하는 Java 프로그램이다. WEB 클라이언트의 요청에 따른 파라미터에 따라, 그것을 서버 측에서 해석하여 WEB 페이지 내용을 동적으로 생성, 변화시켜 응답한다. 코드는 유사하지만, JavaScript처럼 브라우저 측에서 실행하는 스크립트가 아니다.


4. 3. 자바 개발 키트 (JDK)

Java 개발 키트(''Java Development Kit'')는 자바 프로그램을 개발하는 데 필요한 소프트웨어이다. 자바 실행 환경도 내포하고 있다. 자바 컴파일러 등의 기본 개발 도구, 각종 개발 지원 도구, 자바 API로 구성되어 있다. 앞서 언급한 에디션에 따라 개발 도구 내용과 API 구성에 차이가 있다. Java 개발 키트의 명칭은 지금까지 여러 번 변경되었다.

  • J2SE 1.2.2_004까지는 JDK (''Java Development Kit'')라고 불렀다.
  • J2SE 1.4까지는 Java2 SDK (''Java2 Software Development Kit'')라고 불렀다.
  • J2SE 5.0부터는 다시 JDK (''Java Development Kit'')라고 불렀다.
  • JavaSE 7부터는 엔터프라이즈 버전과 마이크로 버전에서는 Java SDK (''Java Software Development Kit'')라고 부르고, 스탠다드 버전과 카드 버전에서는 JDK (''Java Development Kit'')라고 부르게 되었다. JDK는 SDK의 확장 서브세트(SDK의 일부분 + 기타)로 간주된다.


; 자바 API

API는 애플리케이션 프로그래밍 인터페이스의 약자이며, 자바 클래스 라이브러리 내부에서 프로그래머에게 공개되는 클래스, 인터페이스, 메서드, 필드, 상수의 집합이다. 프로그래머는 이를 사용하여 각종 소프트웨어를 개발한다. API는 기본적으로 클래스 라이브러리의 소속에 따라 패키지 (''package'')라고 하는 네임스페이스로 분류되어 제공된다. 패키지는 각 단어를 마침표로 연결하여 계층화되어 있다. 첫 번째 단어인 java는 개발사에서 제공하는 순정 기초 버전을 의미한다. 그 외에 순정 확장 버전인 javax, 임의 단체에서 제공하는 org, 기업에서 제공하는 com이 있다.

# java.lang - 자바 언어의 기초를 다룬다.

# java.io - 파일 입출력 등.

# java.util - 동적 배열과 동적 연관 배열. 데이터 집합의 조작.

# java.math - 각종 계산을 다룬다.

# java.text - 달력, 날짜, 시간, 통화, 문자 코드 등의 국제화 및 지역화를 다룬다.

# java.net - 소켓 통신을 다룬다.

# java.awt - 그래픽 사용자 인터페이스를 다룬다.

# java.applet - 애플릿 생성용.

# java.beans - 소프트웨어 컴포넌트 작성용.

# java.sql - SQL을 다룬다.

# java.rmi - 분산 객체를 다룬다.

# java.security - 보안 정책, 사용자 인증 및 권한 승인, 공개 키 암호 방식 등.

; 통합 개발 환경과 개발 지원 도구

통합 개발 환경 (IDE)은 JDK를 핵심으로 하여 비주얼 에디터나 빌드 매니저 등 다양한 개발 지원 기능을 갖춘 소프트웨어이다. JDK만으로는 메모장에서 프로그램을 작성하고 명령줄로 컴파일하여 콘솔에서 디버깅하는 극히 원시적인 작업이 되지만, IDE를 사용하면 다기능 에디터 코딩과 빌드 과정의 자동화 및 시각적인 디버깅이 가능하다. 자바 개발용 IDE는 다양한 기업과 임의 단체에서 공개하고 있다.

  • '''NetBeans''' - (썬 마이크로시스템즈오라클) 오픈 소스 IDE.
  • '''이클립스 SDK''' - (IBM이클립스 재단) 오픈 소스 IDE. 자바용 IDE의 공통 기반으로 존재한다. 여기에서 WebSphere Studio, JBuilder 등 다양한 IDE가 파생되었다.
  • '''WebSphere Studio''' - (IBM) 상용 IDE. 이클립스에 유료 플러그인 기능을 결합한 것이다.[115]。현재는 업데이트 중단.
  • Rational Application Developer|IBM Rational영어 - (IBM) Rational 브랜드 상용 IDE. WebSphere Studio의 후속 제품.
  • '''JBuilder''' - (보랜드 → 엠바카데로 테크놀로지스) 상용 IDE. JBuilder2007부터 이클립스 기반이 되었다.
  • '''Oracle JDeveloper''' - (오라클) Oracle Application Server와 통합되어 있다. 2005년 6월 28일에 무료화되었다.
  • '''Oracle Workshop for WebLogic''' - (BEA 시스템즈 → 오라클) Oracle WebLogic Server|WebLogic영어와 통합되어 있다.
  • '''BlueJ''' - (썬 마이크로시스템즈, 호주 디킨 대학교, 영국 켄트 대학교의 공동 개발) 프리 IDE.
  • '''IntelliJ IDEA''' - (JetBrains) 상용 IDE. 안드로이드 스튜디오의 기반이 되었다.
  • '''JCreator''' - (Xinox Software) 상용 IDE.
  • '''Xcode''' - (애플) macOS에 부속된 IDE.


개발 지원 도구는 프로젝트 관리, 자동 빌드, 디버깅, 모니터링을 용이하게 한다. 아래 외에도 많은 지원 도구가 존재한다.

  • '''아파치 앤트''' - 자바 애플리케이션의 빌드 도구. 아파치 소프트웨어 재단 프로젝트에 의해 개발되었다. 컴파일, 버전 관리 시스템과의 연계, jar, javadoc 생성, 파일의 복사/이동/삭제/변환 등의 일련의 처리를 자동화하여 효율적으로 실행한다. make와 유사한 도구이며, XML 파일에 빌드 규칙을 기술한다. 자바 외의 언어로 애플리케이션 개발이나, 애플리케이션 개발 이외의 용도로도 사용할 수 있다.
  • '''아파치 메이븐''' - 자바 애플리케이션의 프로젝트 관리 도구. 아파치 소프트웨어 재단 프로젝트에 의해 개발되었다.
  • '''Gradle''' - 아파치 앤트아파치 메이븐의 컨셉에 기초한 오픈 소스 빌드 자동화 시스템.
  • '''JUnit''' - 자바 애플리케이션의 단위 테스트 프레임워크. 단위 테스트를 자동화한다. xUnit의 일종이다. 테스트 주도 개발을 지원한다.

5. 자바 API 및 라이브러리

자바 기술은 개인을 포함한 다양한 조직에서 다양한 형태로 공개되고 있으며, 개발사에서 제시된 기술은 자바 커뮤니티 프로세스(JCP)의 심사를 거쳐 자바 기술 중 하나로 인증된다. 이를 표준화라고 한다. 자바 기술이 준수해야 할 규범 사양은 JCP 관리하에 발행되는 수많은 자바 사양 요청 (Java Specification Request)에서 정의된다.

다음은 다양한 분야에 도입되고 있는 자바 기술의 예시이다.

기술명설명
JNI (자바 네이티브 인터페이스)다른 언어로 구현된 네이티브 코드를 호출하는 기술
JMI (Java Metadata Interface)자바 메타데이터의 생성, 접근, 검색, 송수신에 관한 사양
JML (Java Modeling Language)계약에 의한 설계(DbC)를 지향한 형식 언어를 소스 코드에 도입
JMX (자바 관리 확장)주로 분산 시스템에서 의존성 주입에 의한 자바 프로그램의 동적인 재구성 기술
JDMK (Java Dynamic Management Kit)JMX 사양에 기반한 개발 지원 소프트웨어
JDO (자바 데이터 객체)객체영속화의 사양
Jini분산 시스템을 구축하는 네트워크 아키텍처
JavaSpacesJini의 분산 시스템 환경에서 객체의 송수신과 영속화 등을 지원하는 기술
JAIN (Java API for Integrated Networks)통합 통신 네트워크용 API
JSF (자바 서버 페이스)웹 클라이언트에 사용자 인터페이스를 제공하는 서버용 기술
JXTAP2P의 가상 네트워크를 위한 오픈 프로토콜
OSGi서비스의 동적인 관리와 원격 보수
Java3D3차원 그래픽스 프로그래밍을 위한 고수준 API.
JOGL (Java OpenGL)OpenGL을 사용하는 3D 프로그래밍을 위한 저수준 API
JAI (Java Advanced Imaging)고수준의 이미지 조작 API
LWJGL게임 개발용 API. OpenGL, OpenAL, OpenCL을 다룰 수 있다. 다양한 게임용 컨트롤러도 다룰 수 있다.
JSML (Java Speech Markup Language)음성 합성 시스템에 텍스트 주석을 추가
블루레이 디스크 자바블루레이 디스크(BD)에서 실행되는 각종 콘텐츠 제작용


5. 1. 자바 API

자바 클래스 라이브러리는 자바 애플리케이션 개발을 지원하기 위해 개발된 표준 라이브러리이다. 이 라이브러리는 오라클사(Oracle)가 자바 커뮤니티 프로세스 프로그램을 통해 다른 회사들과 협력하여 관리한다.[71] 이 과정에 참여하는 회사나 개인은 API의 설계 및 개발에 영향을 미칠 수 있다.

핵심 라이브러리는 다음과 같은 기능을 포함한다.

통합 라이브러리는 애플리케이션 작성자가 외부 시스템과 통신할 수 있도록 하며 다음을 포함한다.

  • 데이터베이스 액세스를 위한 자바 데이터베이스 연결 (JDBC) 응용 프로그래밍 인터페이스 (API)
  • 조회 및 검색을 위한 자바 명명 및 디렉터리 인터페이스 (JNDI)
  • 분산 애플리케이션 개발을 위한 자바 원격 메서드 호출 (RMI) 및 공통 객체 요청 브로커 아키텍처 (CORBA)
  • 애플리케이션 관리 및 모니터링을 위한 자바 관리 확장 (JMX)


사용자 인터페이스 라이브러리는 다음을 포함한다.

  • (무거운, 또는 네이티브) 추상 윈도우 툴킷 (AWT)는 그래픽 사용자 인터페이스 (GUI) 구성 요소, 해당 구성 요소를 배치하는 수단, 해당 구성 요소의 이벤트를 처리하는 수단을 제공한다.
  • AWT를 기반으로 하지만 (비네이티브) AWT 위젯의 구현을 제공하는 (가벼운) 스윙 라이브러리
  • 오디오 캡처, 처리 및 재생을 위한 API
  • JavaFX


자바 기술은 개인을 포함한 다양한 조직에서 다양한 형태로 공개되고 있으며, 개발사에서 제시된 기술은 자바 커뮤니티 프로세스(JCP)의 심사를 통과한 후에 자바 기술 중 하나로 인증된다. JCP 관리하에 발행되는 수많은 자바 사양 요청 (Java Specification Request)에서 자바 기술이 준수해야 할 규범 사양이 정의된다.

다음은 다양한 분야에 도입되고 있는 자바 기술의 예시이다.

기술명설명
JNI (자바 네이티브 인터페이스)다른 언어로 구현된 네이티브 코드를 호출하는 기술
JMI (Java Metadata Interface)자바 메타데이터의 생성, 접근, 검색, 송수신에 관한 사양
JML (Java Modeling Language)계약에 의한 설계(DbC)를 지향한 형식 언어를 소스 코드에 도입
JMX (자바 관리 확장)주로 분산 시스템에서 의존성 주입에 의한 자바 프로그램의 동적인 재구성 기술
JDMK (Java Dynamic Management Kit)JMX 사양에 기반한 개발 지원 소프트웨어
JDO (자바 데이터 객체)객체영속화의 사양
Jini분산 시스템을 구축하는 네트워크 아키텍처
JavaSpacesJini의 분산 시스템 환경에서 객체의 송수신과 영속화 등을 지원하는 기술
JAIN (Java API for Integrated Networks)통합 통신 네트워크용 API
JSF (자바 서버 페이스)웹 클라이언트에 사용자 인터페이스를 제공하는 서버용 기술
JXTAP2P의 가상 네트워크를 위한 오픈 프로토콜
OSGi서비스의 동적인 관리와 원격 보수
Java3D3차원 그래픽스 프로그래밍을 위한 고수준 API. Java 3D
JOGL (Java OpenGL)OpenGL을 사용하는 3D 프로그래밍을 위한 저수준 API
JAI (Java Advanced Imaging)고수준의 이미지 조작 API
LWJGL게임 개발용 API. OpenGL, OpenAL, OpenCL을 다룰 수 있다. 다양한 게임용 컨트롤러도 다룰 수 있다.
JSML (Java Speech Markup Language)음성 합성 시스템에 텍스트 주석을 추가
블루레이 디스크 자바블루레이 디스크(BD)에서 실행되는 각종 콘텐츠 제작용


5. 2. 자바 라이브러리

자바 클래스 라이브러리는 자바 애플리케이션 개발을 지원하기 위해 개발된 표준 라이브러리이다. 이 라이브러리는 오라클이 자바 커뮤니티 프로세스 프로그램을 통해 다른 회사들과 협력하여 관리한다.[71] 이 과정에 참여하는 회사나 개인은 API의 설계 및 개발에 영향을 미칠 수 있다.

클래스 라이브러리는 다음과 같은 기능을 포함한다.

  • 핵심 라이브러리:
  • * 입출력(I/O) 및 비차단 I/O(NIO)
  • * 네트워킹 (자바 11부터 새로운 사용자 에이전트(HTTP 클라이언트) 포함)[75]
  • * 반사 프로그래밍(리플렉션)
  • * 동시 컴퓨팅(병행성)
  • * 제네릭
  • * 스크립팅, 컴파일러
  • * 함수형 프로그래밍(람다, 스트리밍)
  • * 컬렉션 라이브러리는 자료 구조인 리스트, 사전, 트리, 집합, 및 데크, 또는 스택을 구현한다.[76]
  • * XML 처리 (파싱, 변환, 유효성 검사) 라이브러리
  • * 보안[77]
  • * 국제화와 지역화 라이브러리[78]
  • 통합 라이브러리: 애플리케이션 작성자가 외부 시스템과 통신할 수 있도록 한다. 이러한 라이브러리에는 다음이 포함된다.
  • * 데이터베이스 액세스를 위한 자바 데이터베이스 연결(JDBC) 응용 프로그래밍 인터페이스(API)
  • * 조회 및 검색을 위한 자바 명명 및 디렉터리 인터페이스(JNDI)
  • * 분산 애플리케이션 개발을 위한 자바 원격 메서드 호출(RMI) 및 공통 객체 요청 브로커 아키텍처(CORBA)
  • * 애플리케이션 관리 및 모니터링을 위한 자바 관리 확장(JMX)
  • 사용자 인터페이스 라이브러리:
  • * (무거운, 또는 네이티브) 추상 윈도우 툴킷(AWT)는 그래픽 사용자 인터페이스(GUI) 구성 요소, 해당 구성 요소를 배치하는 수단, 해당 구성 요소의 이벤트를 처리하는 수단을 제공한다.
  • * AWT를 기반으로 하지만 (비네이티브) AWT 위젯의 구현을 제공하는 (가벼운) 스윙 라이브러리
  • * 오디오 캡처, 처리 및 재생을 위한 API
  • * JavaFX


자바 기술은 개인을 포함한 다양한 조직에서 다양한 형태로 공개되고 있다. 개발사에서 제시된 기술은 자바 커뮤니티 프로세스(JCP)의 심사를 통과한 후에 자바 기술 중 하나로 인증된다. 이를 표준화라고 한다. 자바 기술이 준수해야 할 규범 사양은 JCP 관리하에 발행되는 수많은 자바 사양 요청 (Java Specification Request)에서 정의된다.

자바 기술은 다양한 분야에 도입되고 있으며, 그 예는 다음과 같다.

기술설명
JNI (자바 네이티브 인터페이스)다른 언어로 구현된 네이티브 코드를 호출하는 기술
JMI (Java Metadata Interface)자바 메타데이터의 생성, 접근, 검색, 송수신에 관한 사양
JML (Java Modeling Language)계약에 의한 설계(DbC)를 지향한 형식 언어를 소스 코드에 도입
JMX (자바 관리 확장)주로 분산 시스템에서 의존성 주입에 의한 자바 프로그램의 동적인 재구성 기술
JDMK (Java Dynamic Management Kit)JMX 사양에 기반한 개발 지원 소프트웨어
JDO (자바 데이터 객체)객체영속화의 사양
Jini분산 시스템을 구축하는 네트워크 아키텍처
JavaSpacesJini의 분산 시스템 환경에서 객체의 송수신과 영속화 등을 지원하는 기술
JAIN (Java API for Integrated Networks)통합 통신 네트워크용 API
JSF (자바 서버 페이스)웹 클라이언트에 사용자 인터페이스를 제공하는 서버용 기술
JXTAP2P의 가상 네트워크를 위한 오픈 프로토콜
OSGi서비스의 동적인 관리와 원격 보수
Java3D3차원 그래픽스 프로그래밍을 위한 고수준 API.
JOGL (Java OpenGL)OpenGL을 사용하는 3D 프로그래밍을 위한 저수준 API
JAI (Java Advanced Imaging)고수준의 이미지 조작 API
LWJGL게임 개발용 API. OpenGL, OpenAL, OpenCL을 다룰 수 있다. 다양한 게임용 컨트롤러도 다룰 수 있다.
JSML (Java Speech Markup Language)음성 합성 시스템에 텍스트 주석을 추가
블루레이 디스크 자바블루레이 디스크(BD)에서 실행되는 각종 콘텐츠 제작용


6. 자바 파생 응용 분야


  • 자바 서버 페이지(JSP, JavaServer Pages)는 HTML 페이지와 같은 응답을 클라이언트의 HTTP 요청에 생성하는 서버 측 Java EE 컴포넌트이다. JSP는 특수 구분 기호 `<%`와 `%>`를 사용하여 HTML 페이지에 자바 코드를 삽입한다. JSP는 처음 액세스될 때 자체적으로 Java 애플리케이션인 Java ''서블릿''으로 컴파일되며, 그 후 생성된 서블릿이 응답을 생성한다.[61]
  • 안드로이드는 오픈 소스 기반의 모바일 운영 체제이다. 안드로이드는 리눅스 커널을 기반으로 하며, 안드로이드 SDK는 안드로이드 애플리케이션 개발의 기반으로 자바 언어를 사용하지만, 표준 GUI, SE, ME 또는 기타 기존의 자바 표준을 사용하지 않는다.[81] 안드로이드 SDK에서 지원하는 바이트코드 언어는 스마트폰태블릿 컴퓨터와 같은 저메모리 장치에 최적화된 자체 가상 머신에서 실행된다. 안드로이드 버전에 따라 바이트코드는 달빅 가상 머신에 의해 해석되거나, 안드로이드 런타임에 의해 네이티브 코드로 컴파일된다.

7. 자바와 한국

한국에서 자바는 전자정부 표준 프레임워크의 기반 기술로 채택되어 공공 부문 시스템 개발에 널리 사용되고 있다. 많은 기업들이 웹 서비스 및 엔터프라이즈 시스템 구축에 자바를 사용하고 있다. 안드로이드 앱 개발에도 핵심적인 역할을 하고 있다.

8. 비판

자바로 작성된 프로그램은 C++(C++)로 작성된 프로그램보다 느리고 더 많은 메모리를 필요로 한다는 평판을 가지고 있다.[50][51] 그러나 1997/1998년에 자바 1.1에 JIT 컴파일이 도입되면서 자바 프로그램의 실행 속도가 크게 향상되었고,[52] 더 나은 코드 분석을 지원하는 언어 기능(내부 클래스, StringBuilder 클래스, 선택적 어설션 등)의 추가, 2000년에 Sun의 기본 JVM이 된 HotSpot과 같은 자바 가상 머신(JVM)의 최적화로 실행 속도가 향상되었다. 자바 1.5에서는 lock-free ConcurrentMaps 및 기타 멀티 코어 컬렉션의 구현을 포함하는 패키지가 추가되면서 성능이 향상되었으며, 자바 1.6에서 더욱 개선되었다.

자바에 대한 비판에는 제네릭 구현,[66] 속도,[50] 부호 없는 숫자 처리,[67] 부동 소수점 산술 구현,[68] 그리고 기본 자바 VM 구현인 핫스팟의 보안 취약점 역사가 포함된다.[69]

개발자들은 자바 EE의 표준 부분인 자바 영속성 API(JPA)의 복잡성과 장황함을 비판해 왔다. 이로 인해 데이터베이스 작업을 단순화하고 상용구 코드를 줄이는 것을 목표로 하는 스프링 데이터 JPA와 같은 더 높은 수준의 추상화 채택이 증가했다. 이러한 프레임워크의 인기가 높아지는 것은 표준 JPA 구현이 현대 자바 개발에 사용하기 쉽지 않다는 것을 시사한다.[70]

9. 자바 관련 자격증

인증 경로


오라클은 여러 자바 관련 자격증을 제공하고 있다.[118][119][120][121] Java 버전 업데이트에 따라 자격증도 변경될 수 있다. 단, 변경 전에 취득한 자격은 변경 후에도 유효하다. 인증 시험에 불합격한 경우, 해당 시험일을 포함하여 14일 이내에는 동일한 시험을 다시 볼 수 없다.

현재 응시 가능한 자격
자격 명칭레벨대상 버전
Java Foundations Certified Junior AssociateJunior Associate불명
Oracle Certified Java Programmer, Bronze SE 7/8BronzeJava SE 7/8
Oracle Certified Java Programmer, Silver SE 8AssociateJava SE 8
Oracle Certified Java Programmer, Gold SE 8ProfessionalJava SE 8
Oracle Certified Professional, Java EE 7 Application DeveloperProfessionalJava EE 7
Oracle Certified Master, Java EE 6 Enterprise ArchitectMasterJava EE 6
Oracle Certified Expert, Java EE 6 Enterprise JavaBeans DeveloperExpertJava EE 6
Oracle Certified Expert, Java EE 6 JavaServer Faces DeveloperExpertJava EE 6
Oracle Certified Expert, Java EE 6 Web Services DeveloperExpertJava EE 6
Oracle Certified Expert, Java EE 6 Java Persistence API DeveloperExpertJava EE 6
Oracle Certified Expert, Java EE 6 Web Component DeveloperExpertJava EE 6


참조

[1] 간행물 Java's 20 Years of Innovation https://www.forbes.c[...] 2015-05-20
[2] 서적 Program Development in Java – Abstraction, Specification, and Object-Oriented Design USA, Addison Wesley
[3] 웹사이트 Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans https://books.google[...] 2014-07-28
[4] Webarchive http://www.barrycorn[...] 2011-03-19
[5] 웹사이트 The Java Language Environment https://www.oracle.c[...] 1996-05
[6] 웹사이트 The Java Language Specification, 2nd Edition https://java.sun.com[...]
[7] 웹사이트 The A-Z of Programming Languages: Modula-3 http://www.computerw[...] Computerworld
[8] 웹사이트 Niklaus Wirth's lecture at the Polytechnic Museum in Moscow http://www.delphikin[...] 2005-09-22
[9] Webarchive http://cs.gmu.edu/~s[...] 2011-07-13
[10] 웹사이트 History of Java http://www.fscript.o[...]
[11] 웹사이트 A Conversation with James Gosling – ACM Queue http://queue.acm.org[...] Queue.acm.org 2004-08-31
[12] 보고서 About Microsoft's "Delegates" http://java.sun.com/[...] JavaSoft, Sun Microsystems, Inc.
[13] 웹사이트 Chapel spec (Acknowledgements) http://chapel.cray.c[...] Cray Inc. 2015-10-01
[14] 웹사이트 Gambas Documentation Introduction http://gambaswiki.or[...] Gambas Website
[15] 간행물 Facebook Q&A: Hack brings static typing to PHP world http://www.infoworld[...] 2014-03-26
[16] 웹사이트 Write once, run anywhere? http://www.computerw[...] "[[Computer Weekly]]" 2002-05-02
[17] 웹사이트 1.2 Design Goals of the Java Programming Language https://www.oracle.c[...] Oracle 1999-01-01
[18] 웹사이트 Don't call it a comeback: Why Java is still champ https://github.com/r[...] 2022-08-09
[19] 웹사이트 The top programming languages https://octoverse.gi[...] "[[GitHub]]"
[20] 간행물 Is Java Losing Its Mojo? https://www.wired.co[...] 2013-08-01
[21] 웹사이트 Java technology: The early years https://java.sun.com[...] "[[Sun Microsystems]]" c. 1998
[22] 웹사이트 The History of Java Technology http://www.java.com/[...] c. 1995
[23] 웹사이트 So why did they decide to call it Java? https://www.infoworl[...] 1996-10-04
[24] 문서 Once Upon an Oak http://www.artima.co[...] 2007-04-13
[25] 웹사이트 JAVASOFT SHIPS JAVA 1.0 http://www.sun.com/s[...]
[26] 서적 Object-oriented Programming with Java: Essentials and Applications https://books.google[...] Tata McGraw-Hill Education
[27] 웹사이트 JSG – Java Study Group http://www.open-std.[...]
[28] 웹사이트 Why Java Was – Not – Standardized Twice http://www.computer.[...]
[29] 웹사이트 What is ECMA—and why Microsoft cares http://www.zdnet.com[...]
[30] 웹사이트 Java Community Process website http://www.jcp.org/e[...] Jcp.org 2010-05-24
[31] 웹사이트 JAVAONE: Sun – The bulk of Java is open sourced http://grnlight.net/[...] GrnLight.net
[32] 웹사이트 Sun's Evolving Role as Java Evangelist http://onjava.com/pu[...] "[[O'Reilly Media]]"
[33] 웹사이트 Oracle and Java https://www.oracle.c[...] Oracle Corporation
[34] 웹사이트 Time to move on... http://nighthacks.co[...] 2010-04-09
[35] 웹사이트 Moving to a Plugin-Free Web https://blogs.oracle[...]
[36] 웹사이트 Learn About Java Technology http://www.java.com/[...] Oracle 2011-11-21
[37] 웹사이트 Why should I uninstall older versions of Java from my system? https://www.java.com[...] Oracle 2021-09-24
[38] 웹사이트 Oracle Java SE Support Roadmap https://www.oracle.c[...] Oracle 2021-09-13
[39] 웹사이트 Temurin™ Support; Adoptium https://adoptium.net[...] 2024-03-29
[40] 웹사이트 JAVASOFT SHIPS JAVA 1.0 https://web.archive.[...] 2008-02-05
[41] 뉴스 Introducing Java SE 11 https://blogs.oracle[...] 2018-09-26
[42] 뉴스 The Arrival of Java 15! https://blogs.oracle[...] Oracle Corporation 2020-09-15
[43] 웹사이트 JDK 21 https://openjdk.org/[...] 2023-09-20
[44] 웹사이트 Java Card Overview https://www.oracle.c[...] Oracle 2014-12-18
[45] 웹사이트 Java Platform, Micro Edition (Java ME) https://www.oracle.c[...] Oracle 2014-12-18
[46] 웹사이트 Java SE https://www.oracle.c[...] Oracle 2014-12-18
[47] 웹사이트 Java Platform, Enterprise Edition (Java EE) https://www.oracle.c[...] Oracle 2014-12-18
[48] 웹사이트 Deep Dive Into the New Java JIT Compiler – Graal {{!}} Baeldung https://www.baeldung[...] 2021-08-06
[49] 웹사이트 Is the JVM (Java Virtual Machine) platform dependent or platform independent? What is the advantage of using the JVM, and having Java be a translated language? http://www.programme[...] Programmer Interview 2015-01-19
[50] 웹사이트 Why Java will always be slower than C++ https://web.archive.[...] 2008-02-15
[51] 웹사이트 Loop Recognition in C++/Java/Go/Scala https://days2011.sca[...] 2012-07-12
[52] 웹사이트 Symantec's Just-In-Time Java Compiler To Be Integrated into Sun JDK 1.1 https://web.archive.[...] 2009-08-01
[53] 논문 Noc-HMP: A Heterogeneous Multicore Processor for Embedded Systems Designed in SystemJ 2017-07-22
[54] 웹사이트 NullPointerException http://docs.oracle.c[...] Oracle 2014-05-06
[55] 웹사이트 Exceptions in Java http://www.artima.co[...] Artima.com 2010-08-10
[56] 웹사이트 Java HotSpot™ Virtual Machine Performance Enhancements https://docs.oracle.[...] Oracle.com 2017-04-26
[57] 웹사이트 Operator Overloading (C# vs Java) http://msdn.microsof[...] Microsoft 2014-12-10
[58] 웹사이트 Multiple Inheritance of State, Implementation, and Type https://docs.oracle.[...] Oracle 2014-12-10
[59] 웹사이트 Deprecated APIs, Features, and Options https://www.oracle.c[...] Oracle 2019-05-31
[60] 웹사이트 Applet (Java Platform SE 7) https://docs.oracle.[...] Oracle 2020-05-01
[61] 웹사이트 What Is a JSP Page? - The Java EE 5 Tutorial https://docs.oracle.[...] 2020-05-01
[62] 웹사이트 Trail: Creating a GUI With JFC/Swing (The Java Tutorials) https://docs.oracle.[...] 2020-05-01
[63] 웹사이트 Removed from JDK 11, JavaFX 11 arrives as a standalone module https://www.infoworl[...] 2018-09-20
[64] 웹사이트 Getting Started with JavaFX: Hello World, JavaFX Style https://docs.oracle.[...] Oracle 2020-05-01
[65] 웹사이트 Java and Scala's Type Systems are Unsound https://raw.githubus[...] 2017-02-20
[66] 웹사이트 Generics Considered Harmful https://web.archive.[...] java.net 2005-06-27
[67] 웹사이트 Java and unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Or rather, the lack thereof) http://darksleep.com[...] 2011-07-04
[68] 웹사이트 How Java's Floating-Point Hurts Everyone Everywhere – ACM 1998 Workshop on Java (Stanford) http://www.cs.berkel[...] Electrical Engineering & Computer Science, University of California at Berkeley 1998-03-01
[69] 웹사이트 Have you checked the Java? https://web.archive.[...] 2011-12-23
[70] 서적 Java Persistence API, Jenkins and AWS https://www.vlebooks[...] 2024-09-16
[71] 웹사이트 Understanding How Java Programs Work http://www.informit.[...] 2019-03-26
[72] 뉴스 Google wins six-year legal battle with Oracle over Android code copyright https://www.theguard[...] 2019-03-26
[73] 웹사이트 java.nio (Java Platform SE 8) https://docs.oracle.[...]
[74] 웹사이트 Java Networking https://docs.oracle.[...]
[75] 웹사이트 HttpClient (Java SE 11 & JDK 11) https://docs.oracle.[...]
[76] 웹사이트 Collections Framework Overview http://docs.oracle.c[...] Oracle 2014-12-18
[77] 웹사이트 Java Security Overview http://docs.oracle.c[...] Oracle 2014-12-18
[78] 웹사이트 Trail: Internationalization http://docs.oracle.c[...] Oracle 2014-12-18
[79] 웹사이트 How to Write Doc Comments for the Javadoc Tool https://www.oracle.c[...] Oracle 2014-12-18
[80] 뉴스 Sun, Microsoft settle Java lawsuit https://www.infoworl[...] 2020-07-13
[81] 웹사이트 Google Android: Initial Impressions and Criticism http://www.javalobby[...] 2009-03-07
[82] 웹사이트 Google guilty of infringement in Oracle trial; future legal headaches loom https://arstechnica.[...] Ars Technica 2012-05-08
[83] 웹사이트 Google wins crucial API ruling, Oracle's case decimated https://arstechnica.[...] 2012-06-01
[84] 뉴스 Court sides with Oracle over Android in Java patent appeal https://www.cnet.com[...] 2014-05-10
[85] 웹사이트 Google beats Oracle—Android makes "fair use" of Java APIs https://arstechnica.[...] 2016-05-26
[86] 웹사이트 "Google's use of the Java API packages was not fair," appeals court rules https://arstechnica.[...] 2019-08-06
[87] 웹사이트 Google asks Supreme Court to overrule disastrous ruling on API copyrights https://arstechnica.[...] 2019-04-23
[88] 웹사이트 "Google LLC v. Oracle America, Inc" 593 U. S. ____ (2021) https://www.supremec[...] 2021-04-06
[89] 웹사이트 Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans "{{Google books|0rUt[...] 2014-07-28
[90] 웹사이트 The Java Language Environment https://www.oracle.c[...] 2014-05-06
[91] 웹사이트 The Java Language Specification, 2nd Edition https://java.sun.com[...] 2008-02-08
[92] 웹사이트 The A-Z of Programming Languages: Modula-3 http://www.computerw[...] Computerworld.com.au 2010-06-09
[93] 문서
[94] 웹사이트 What is Java and why do I need it? https://www.java.com[...] 2019-01
[95] 웹사이트 1.2 Design Goals of the Java™ Programming Language https://www.oracle.c[...] オラクル 2013-01-14
[96] 웹사이트 Write once, run anywhere? Computer Weekly 2009-07-27
[97] 웹사이트 The 10 most popular programming languages, according to the 'Facebook for programmers' https://www.business[...] 2019-01-22
[98] 웹사이트 JavaOne 2013 Review: Java Takes on the Internet of Things https://www.oracle.c[...] 2016-06-19
[99] 웹사이트 Why should I uninstall older versions of Java from my system? https://www.java.com[...] オラクル 2016-09-09
[100] 웹사이트 Java Software https://www.oracle.c[...] 2019-10-19
[101] 서적 広辞苑 第六版
[102] 웹사이트 JAVASOFT SHIPS JAVA 1.0 https://web.archive.[...] 2008-02-05
[103] 웹사이트 Introducing Java SE 11 https://blogs.oracle[...] 2018-09-26
[104] 웹사이트 The Arrival of Java 15! https://blogs.oracle[...] Oracle 2020-09-15
[105] 웹사이트 オラクル、Java 17をリリース https://www.oracle.c[...] Oracle 2021-09-30
[106] 웹사이트 オラクル、Java 18を発表 https://www.oracle.c[...] Oracle 2022-03-22
[107] 웹사이트 オラクル、Java 19をリリース https://www.oracle.c[...] Oracle 2022-09-21
[108] 웹사이트 オラクル、Java 20をリリース https://www.oracle.c[...] Oracle 2023-03-22
[109] 웹사이트 オラクル、Java 21のリリースとサポート・ロードマップの延長を発表 https://www.oracle.c[...] Oracle 2023-09-19
[110] 웹사이트 オラクル、Java 22をリリース https://www.oracle.c[...] Oracle 2024-03-21
[111] 웹사이트 オラクル、Java 23をリリース https://www.oracle.c[...] Oracle 2024-09-17
[112] 웹사이트 Opening Up Java EE - An Update https://blogs.oracle[...] オラクル 2017-09-12
[113] 웹사이트 EE4J、EclipseファウンデーションがオープンソースJava EEを準備 https://www.infoq.co[...] InfoQ 2017-11-16
[114] 웹사이트 Java EE は Jakarta EE となる https://www.infoq.co[...] InfoQ 2018-03-05
[115] 웹사이트 EclipseとWebSphere Studioはどう違うのか {{!}} 日経 xTECH(クロステック) https://xtech.nikkei[...] Nikkei Business Publications, Inc. 2003-10-31
[116] 웹사이트 Sun Fulfills Promise of Open and Free Java Technology and Releases Java SE Platform to OpenJDK Community http://www.sun.com/a[...] 2007-05-08
[117] 문서 http://www.excelsior[...]
[118] 웹사이트 オラクル Java SE 認定資格パス 概要 https://education.or[...]
[119] 웹사이트 オラクル Java EE and Web Services 認定資格パス 概要 https://education.or[...]
[120] 웹사이트 Java Foundations Certified Junior Associate (novice-level certification) https://education.or[...]
[121] 웹사이트 認定試験一覧 http://www.oracle.co[...]
[122] 웹사이트 Java資格が大幅リニューアル。Bronze/Silver/Goldが登場 https://www.atmarkit[...]
[123] 잡지 Java's 20 Years of Innovation https://www.forbes.c[...] 2015-05-20
[124] 서적 Core Java 2 vol 1
[125] 문서 Java SE Naming and Versions http://java.sun.com/[...]
[126] 문서 Version 1.5.0 or 5.0? http://java.sun.com/[...]
[127] 웹인용 JAVASOFT SHIPS JAVA 1.0 http://www.sun.com/s[...] 2008-02-05
[128] 웹인용 Introducing Java SE 11 https://blogs.oracle[...] 2018-09-26
[129] 웹인용 The Arrival of Java 15! https://blogs.oracle[...] Oracle 2020-09-15
[130] 웹인용 1.2 Design Goals of the Java™ Programming Language http://www.oracle.co[...] Oracle 1999-01-01

관련 사건 타임라인

( 최근 20개의 뉴스만 표기 됩니다. )



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com